﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SeguroSoft.Models;
using SeguroSoft.Model.Model;


namespace SeguroSoft.Controllers
{
    public class SegurosController : Controller
    {
        RepositorioSeguro repositorioSeguro = new RepositorioSeguro();
        static private int idServicioElegido;
        Dictionary<string, List<string>> marcas = new Dictionary<string, List<string>>();
        static private List<Seguro> servicioselegidos = new List<Seguro>();
        CompararController CompararControl = new CompararController();

        static string marcaSeleccionada;

        //
        // GET: /Seguros/

        public SegurosController()
        {
            string marca;
            string modelo;
            List<Seguro> seguros = repositorioSeguro.EncontrarTodosLosSeguros().ToList();
            foreach (var seguro in seguros)
            {
                marca = seguro.Marca;
                modelo = seguro.Modelo;

                if (marcas.ContainsKey(marca))
                {
                    if (marcas[marca].Contains(modelo))
                    {
                    }
                    else
                    {
                        marcas[marca].Add(modelo);
                    }

                }
                else
                {
                    marcas.Add(marca, new List<string>());
                    marcas[marca].Add(modelo);
                }

            }
        }

        public ActionResult Index()
        {
            List<Seguro> lista = repositorioSeguro.EncontrarTodosLosSeguros().ToList();

            return View("IndexS", marcas);
        }

        public ActionResult IndexResultadoBusqueda()
        {
            List<Seguro> segurosSeleccionados = new List<Seguro>();

            foreach (var seguro in repositorioSeguro.EncontrarTodosLosSeguros())
            {
                if (seguro.Marca.Equals(marcaSeleccionada))
                {
                    if (seguro.Modelo.Equals(Request.Form["Modelos"]))
                    {
                        if (seguro.Año == Convert.ToInt32(Request.Form["Años"]))
                        {
                            if (Request.Form["Deducible"].Equals("Igual"))
                            {
                                if (seguro.Deducible == Convert.ToInt32(Request.Form["PrecioDeducible"]))
                                {
                                    if (Request.Form["Prima"].Equals("Igual"))
                                    {
                                        if (seguro.Prima == Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Mayor"))
                                    {
                                        if (seguro.Prima > Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Menor"))
                                    {
                                        if (seguro.Prima < Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                }
                            }
                            else if (Request.Form["Deducible"].Equals("Mayor"))
                            {
                                if (seguro.Deducible > Convert.ToInt32(Request.Form["PrecioDeducible"]))
                                {
                                    if (Request.Form["Prima"].Equals("Igual"))
                                    {
                                        if (seguro.Prima == Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Mayor"))
                                    {
                                        if (seguro.Prima > Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Menor"))
                                    {
                                        if (seguro.Prima < Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                }
                            }
                            else if (Request.Form["Deducible"].Equals("Menor"))
                            {
                                if (seguro.Deducible < Convert.ToInt32(Request.Form["PrecioDeducible"]))
                                {
                                    if (Request.Form["Prima"].Equals("Igual"))
                                    {
                                        if (seguro.Prima == Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Mayor"))
                                    {
                                        if (seguro.Prima > Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                    else if (Request.Form["Prima"].Equals("Menor"))
                                    {
                                        if (seguro.Prima < Convert.ToInt32(Request.Form["PrecioPrima"]))
                                        {
                                            segurosSeleccionados.Add(seguro);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            List<List<Seguro>> listaServicio = new List<List<Seguro>>();
            servicioselegidos = segurosSeleccionados;
            listaServicio.Add(segurosSeleccionados);
            return View("IndexResultadoBusqueda", listaServicio);
        }

        public ActionResult IndexMarcaSeleccionada()
        {
            marcaSeleccionada = Request.Form["Marcas"];

            List<string> modelos;
            string marca;
            string modelo;

            modelos = marcas[marcaSeleccionada].ToList();

            Dictionary<string, List<string>> resultadoMarcaSeleccionada = new Dictionary<string, List<string>>();

            resultadoMarcaSeleccionada.Add(marcaSeleccionada, modelos);

            
            List<Seguro> seguros = repositorioSeguro.EncontrarTodosLosSeguros().ToList();

            foreach (var seguro in seguros)
            {
                marca = seguro.Marca;
                modelo = seguro.Modelo;

                if (resultadoMarcaSeleccionada.ContainsKey(marca))
                {
                    if (resultadoMarcaSeleccionada[marca].Contains(modelo))
                    {
                    }
                    else
                    {
                        resultadoMarcaSeleccionada[marca].Add(modelo);
                    }

                }
                else
                {
                    resultadoMarcaSeleccionada.Add(marca, new List<string>());
                    resultadoMarcaSeleccionada[marca].Add(modelo);
                }

            }

            marcas = resultadoMarcaSeleccionada;

            return View("IndexS", marcas);
        }

        public ActionResult IndexResultadoBusquedaGeneral(string busqueda)
        {
            //var busqueda = Request.Form["textob"];
            List<Seguro> segurosSeleccionados = new List<Seguro>();

            foreach (var seguro in repositorioSeguro.EncontrarTodosLosSeguros())
            {
                if ((busqueda.Contains(seguro.Marca) || seguro.Marca.Contains(busqueda)) && !segurosSeleccionados.Contains(seguro))
                {
                    segurosSeleccionados.Add(seguro);
                }
                if ((busqueda.Contains(seguro.Modelo) || seguro.Modelo.Contains(busqueda)) && !segurosSeleccionados.Contains(seguro))
                {
                    segurosSeleccionados.Add(seguro);
                }
                if ((busqueda.Contains(seguro.Año.ToString()) || seguro.Año.ToString().Contains(busqueda)) && !segurosSeleccionados.Contains(seguro))
                {
                    segurosSeleccionados.Add(seguro);
                }
                if ((busqueda.Contains(seguro.Deducible.ToString()) || seguro.Deducible.ToString().Contains(busqueda)) && !segurosSeleccionados.Contains(seguro))
                {
                    segurosSeleccionados.Add(seguro);
                }
                if ((busqueda.Contains(seguro.Prima.ToString()) || seguro.Prima.ToString().Contains(busqueda)) && !segurosSeleccionados.Contains(seguro))
                {
                    segurosSeleccionados.Add(seguro);
                }
            }
            List < List < Seguro >> listaServicio = new List<List<Seguro>>();
            servicioselegidos = segurosSeleccionados;
            listaServicio.Add(segurosSeleccionados);
            return View("IndexResultadoBusqueda", listaServicio);
        }

        public ActionResult Comparar()
        {
            string listaSeguros = Request.Form["comparar"];
            List<string> idSeguros = new List<string>();
            List<Seguro> seguros = new List<Seguro>();

            if (listaSeguros != null)
            {
                idSeguros = listaSeguros.Split(',').ToList();
                foreach (string servicio in idSeguros)
                {
                    int aux = 0;
                    Int32.TryParse(servicio, out aux);
                    seguros.Add(repositorioSeguro.ObtenerSeguro(aux));
                }
            }

            return CompararControl.CompararViewSeguro(seguros);
        }

        public ActionResult Seleccionar(int id)
        {
            return MostrarServicio(id);
        }

        public ActionResult MostrarServicio(int id)
        {
            Seguro serv = repositorioSeguro.ObtenerSeguro(id);
            idServicioElegido = id;
            return View("SeleccionarS", serv);
        }

        public ActionResult Comentar()
        {
            return View("ComentarS", idServicioElegido);
        }

        public ActionResult GuardarComentario()
        {
            string titulo = Request.Form["titulo"];
            string contenido = Request.Form["contenido"];
            string usuario = this.User.Identity.Name;
            int ranking;
            Int32.TryParse(Request.Form["ranking"], out ranking);
            Comentario comentario = new Comentario();
            comentario.Fecha = DateTime.Now;
            comentario.Titulo = Request.Form["titulo"];
            comentario.Contenido = Request.Form["contenido"];
            comentario.RankingServicio = ranking;
            comentario.Usuario = usuario;
            RepositorioComentario repositorioComentarios = new RepositorioComentario();
            repositorioComentarios.crearcomentario(comentario);

            TI tist = new TI();
            tist.IDComentario = repositorioComentarios.ObtenerId(titulo, contenido, usuario);
            tist.IDSeguro = idServicioElegido;
            repositorioSeguro.crearTis(tist);
            return VolverAlServicio();

        }

        public ActionResult VolverAlServicio()
        {
            Seguro serv = repositorioSeguro.ObtenerSeguro(idServicioElegido);
            return View("SeleccionarS", serv);
        }

        public ActionResult Filtrar()
        {
            List<Seguro> wena = new List<Seguro>();
            string marca = Request.Form["marca"];
            string modelo = Request.Form["modelo"];
            string km = Request.Form["km"];
            string costo = Request.Form["costo"];

            if (marca.Equals("NA")) { }
            else
            {
                if (wena.Count == 0)
                {
                    foreach (Seguro servicio in servicioselegidos)
                    {
                        if (servicio.Marca.Equals(marca))
                        {
                            wena.Add(servicio);
                        }
                    }
                }
                else
                {
                    List<Seguro> nas = new List<Seguro>();
                    foreach (Seguro servicio in wena)
                    {
                        if (servicio.Marca.Equals(marca))
                        {
                            wena.Add(servicio);
                        }
                    }
                    wena = nas;
                }
            }
            if (modelo.Equals("NA")) { }
            else
            {
                if (wena.Count == 0)
                {
                    foreach (Seguro servicio in servicioselegidos)
                    {
                        if (servicio.Modelo.Equals(modelo))
                        {
                            wena.Add(servicio);
                        }
                    }
                }
                else
                {
                    List<Seguro> nas = new List<Seguro>();
                    foreach (Seguro servicio in wena)
                    {
                        if (servicio.Modelo.Equals(modelo))
                        {
                            nas.Add(servicio);
                        }
                    }
                    wena = nas;

                }
            }

            if (km.Equals("NA")) { }
            else
            {
                if (wena.Count == 0)
                {
                    foreach (Seguro servicio in servicioselegidos)
                    {
                        if (servicio.Prima.ToString().Equals(km))
                        {
                            wena.Add(servicio);
                        }
                    }
                }
                else
                {
                    List<Seguro> nas = new List<Seguro>();
                    foreach (Seguro servicio in wena)
                    {
                        if (servicio.Prima.ToString().Equals(km))
                        {
                            nas.Add(servicio);
                        }
                    }
                    wena = nas;

                }
            }
            if (costo.Equals("NA")) { }
            else
            {
                if (wena.Count == 0)
                {
                    foreach (Seguro servicio in servicioselegidos)
                    {
                        if (servicio.Deducible.Equals(costo))
                        {
                            wena.Add(servicio);
                        }
                    }
                }
                else
                {
                    List<Seguro> nas = new List<Seguro>();
                    foreach (Seguro servicio in wena)
                    {
                        if (servicio.Deducible.Equals(costo))
                        {
                            nas.Add(servicio);
                        }
                    }
                    wena = nas;

                }

            }
            if (wena.Count > 0)
            {
                List<List<Seguro>> listaServicio = new List<List<Seguro>>();
                listaServicio.Add(servicioselegidos);
                listaServicio.Add(wena);
                return View("IndexResultadoBusqueda", listaServicio);

            }
            else
            {
                List<List<Seguro>> listaServicio = new List<List<Seguro>>();
                listaServicio.Add(servicioselegidos);
                return View("IndexResultadoBusqueda", listaServicio);
            }
        }

    }
}
